<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN"
   "http://www.w3.org/TR/html4/strict.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" lang="en">
<head>
	<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
	<title>12_entends_prototype01</title>
	<meta name="author" content="Stark" />
	<!-- Date: 2018-10-20 -->
	<script type="text/javascript">
		/**
		 * 通过以下操作带来的最大的好处是，compareObjectFunction的作用域变大了
		 * 当compareObjectFunction结束之后，prop这个变量依然存在
		 */
		function compareObjectFunction(prop) {
			// 匿名函数
			return function(obj1,obj2){
				if(obj1[prop]>obj2[prop]) return 1;
				else if(obj1[prop]==obj2[prop]) return 0;
				else return -1;
			}
		}
		var o1 = {name:"Leno",age:23};
		var o2 = {name:"Ada",age:28};
		// 此时就是基于name来进行比较
		/**
		 * 在java或C++中，以下代码执行完之后，需要进行内存的释放
		 * 此时对于java和c++这些静态语言而言，prop会被释放
		 * 但在js中，这个作用域却被放大了
		 */
		var compare = compareObjectFunction("name");
		// 此时就比较了o1和o2
		/**
		 * 在js中，prop这里依然可以被访问，这种通过返回函数来扩大函数函数的作用域的方法
		 * 就是闭包
		 */
		var rel = compare(o1,o2);
		alert(rel);		
	</script>
</head>
<body>

</body>
</html>

